package chapter04.part01;

import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketTimeoutException;

/**
 * 连接阻塞的一些方案
 * 网络访问也是 IO 操作, 所以也会阻塞
 * 
 * @author insight
 * @since 2021/8/29
 */
public class SocketBlockTest {
    public static void main(String[] args) throws IOException {
        // 使用超时机制
        try (Socket socket = new Socket("time-a.nist.gov", 13)) {
            socket.setSoTimeout(100);
            // 如果读取过程中超时了 会抛出异常
            try (InputStream in = socket.getInputStream()) {
                in.readAllBytes();
            } catch (SocketTimeoutException e) {
                e.printStackTrace();
            }
        }
        
        // 构造函数本身也会阻塞 知道建立连接
        // 所以可以先建立一个没有链接的套接字 然后使用超时机制连接
        Socket socket = new Socket();
        socket.connect(new InetSocketAddress("time-a.nist.gov", 13), 1000);
        System.out.println(socket.isConnected());
    }
}